package com.gitee.l0km.aocache;

import static com.google.common.base.Preconditions.checkNotNull;

/*
 * {@link com.google.common.cache.CacheStats}的代理类<br>
 * 
 */
public final class CacheStats {

	private final com.google.common.cache.CacheStats delegate;

	private CacheStats(com.google.common.cache.CacheStats delegate) {
		this.delegate = checkNotNull(delegate, "delegate is null");
	}

    /**
     * 获取代理的原始 {@link com.google.common.cache.CacheStats} 对象。<p>
     * 该方法返回当前代理对象所代理的原始 {@link com.google.common.cache.CacheStats} 对象，<br>
     * 可用于直接访问原始对象的属性和方法。<p>
     * 
     * @return 代理的原始 {@link com.google.common.cache.CacheStats} 对象。
     */
    public com.google.common.cache.CacheStats delegate() {
        return delegate;
    }

	public long requestCount() {
		return delegate.requestCount();
	}

	public long hitCount() {
		return delegate.hitCount();
	}

	public double hitRate() {
		return delegate.hitRate();
	}

	public long missCount() {
		return delegate.missCount();
	}

	public double missRate() {
		return delegate.missRate();
	}

	public long loadCount() {
		return delegate.loadCount();
	}

	public long loadSuccessCount() {
		return delegate.loadSuccessCount();
	}

	public long loadExceptionCount() {
		return delegate.loadExceptionCount();
	}

	public double loadExceptionRate() {
		return delegate.loadExceptionRate();
	}

	public long totalLoadTime() {
		return delegate.totalLoadTime();
	}

	public double averageLoadPenalty() {
		return delegate.averageLoadPenalty();
	}

	public long evictionCount() {
		return delegate.evictionCount();
	}

	@Override
	public int hashCode() {
		return delegate.hashCode();
	}

	@Override
	public boolean equals(Object object) {
		return delegate.equals(object);
	}

	@Override
	public String toString() {
		return delegate.toString();
	}


    /**
     * 根据给定的原始 {@link com.google.common.cache.CacheStats} 对象创建一个新的 {@link CacheStats} 实例。<p>
     * 如果传入的原始对象为 null，则返回 null；否则，返回一个新的 {@link CacheStats} 实例，该实例代理给定的原始对象。<p>
     * 
     * @param original 原始的 {@link com.google.common.cache.CacheStats} 对象。
     * @return 一个新的 {@link CacheStats} 实例，代理给定的原始对象；如果原始对象为 null，则返回 null。
     */
    public static CacheStats of(com.google.common.cache.CacheStats original) {
        return null == original ? null : new CacheStats(original);
    }
}